package org.example.managere.service.feibiao;

import org.example.managere.dto.feibiao.AmKnowledgeEntityDto;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import java.util.Date;
import java.util.List;
import java.util.Optional;

/**
 * 知识图谱实体服务接口 - 电机向量知识库
 */
public interface AmKnowledgeEntityService {
    
    /**
     * 保存知识图谱实体
     * @param dto 知识图谱实体DTO
     * @return 保存后的知识图谱实体DTO
     */
    AmKnowledgeEntityDto save(AmKnowledgeEntityDto dto);
    
    /**
     * 根据ID查找知识图谱实体
     * @param entityId 实体ID
     * @return 可能包含知识图谱实体的Optional
     */
    Optional<AmKnowledgeEntityDto> findById(String entityId);
    
    /**
     * 根据实体名称查找知识图谱实体
     * @param entityName 实体名称
     * @return 可能包含知识图谱实体的Optional
     */
    Optional<AmKnowledgeEntityDto> findByEntityName(String entityName);
    
    /**
     * 更新知识图谱实体
     * @param dto 知识图谱实体DTO
     * @return 更新后的知识图谱实体DTO
     */
    AmKnowledgeEntityDto update(AmKnowledgeEntityDto dto);
    
    /**
     * 删除知识图谱实体
     * @param entityId 实体ID
     */
    void deleteById(String entityId);
    
    /**
     * 查找所有知识图谱实体
     * @return 知识图谱实体DTO列表
     */
    List<AmKnowledgeEntityDto> findAll();
    
    /**
     * 分页查询知识图谱实体
     * @param pageable 分页参数
     * @return 知识图谱实体DTO分页结果
     */
    Page<AmKnowledgeEntityDto> findAll(Pageable pageable);
    
    /**
     * 根据关键字搜索知识图谱实体
     * @param keyword 关键字
     * @param pageable 分页参数
     * @return 知识图谱实体DTO分页结果
     */
    Page<AmKnowledgeEntityDto> searchByKeyword(String keyword, Pageable pageable);
    
    /**
     * 根据实体名称模糊查询
     * @param entityName 实体名称
     * @return 知识图谱实体DTO列表
     */
    List<AmKnowledgeEntityDto> findByEntityNameContaining(String entityName);
    
    /**
     * 根据实体类型查询
     * @param entityType 实体类型
     * @return 知识图谱实体DTO列表
     */
    List<AmKnowledgeEntityDto> findByEntityType(String entityType);
    
    /**
     * 根据实体类型模糊查询
     * @param entityType 实体类型
     * @return 知识图谱实体DTO列表
     */
    List<AmKnowledgeEntityDto> findByEntityTypeContaining(String entityType);
    
    /**
     * 根据录入时间范围查询
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 知识图谱实体DTO列表
     */
    List<AmKnowledgeEntityDto> findByEntryTimeBetween(Date startDate, Date endDate);
    
    /**
     * 统计某个类型的实体数量
     * @param entityType 实体类型
     * @return 实体数量
     */
    long countByEntityType(String entityType);
} 